package Day016_字符流_Properties类.demo01_字符流;

import java.io.FileWriter;

/**
 * @author zhangyan
 * @date 2020/5/8 9:48
 */
/*
    java.io.FileWriter 类是Writer的子类。构造时使用系统默认的字符编码和默认字节缓冲区。

    构造方法:
            FileWriter(File file) ： 创建一个新的 FileWriter，给定要读取的File对象。
            FileWriter(String fileName) ： 创建一个新的 FileWriter，给定要读取的文件的名称。

                1.以上两个构造方法,如果目的地文件为非空文件,就会清空文件内容
                2.以上两个构造方法,如果传入的目的地文件不存在,就会新建一个空文件

            数据追加续写:(重写的构造方法)
            public FileOutputStream(File file,boolean append)
            public FileOutputStream(String name,boolean append)
                true,追加续写   false,清空后覆盖  不写默认false

    常用方法:
            public abstract void close() ：关闭此输出流并释放与此流相关联的任何系统资源
            public abstract void flush() ：刷新此输出流并强制任何缓冲的输出字符被写出

            public void write(int c) ：写出一个字符
            public void write(char[] cbuf) ：将 b.length字符从指定的字符数组写出此输出流
            public abstract void write(char[] b, int off, int len) ：从指定的字符数组，从off开始,写出len个字符

            public void write(String str) ：写出一个字符串

            注意:
                字符输入流 如果不关闭流,或者不刷新缓存区,数据是写不到目的地文件中的
            close flush方法的区别:
                关闭 会刷新缓存区,写出数据,但是输出流不能再次使用
                刷新 会刷新缓存区,写出数据,但是输出流可以再次使用
 */
public class Test4_FileWriter类 {
    public static void main(String[] args) throws Exception{
        //创建字符输出流对象
        // FileWriter fw1 = new FileWriter("D:\\java\\Project\\Demo02\\aaa\\e.txt");
        // FileWriter fw2 = new FileWriter("D:\\java\\Project\\Demo02\\aaa\\e.txt",true);

        //1. 写一个字符数据
        //创建对象
        FileWriter fw1 = new FileWriter("Demo02\\aaa\\e.txt");
        //写数据
        fw1.write('a');
        fw1.write(98);
        //关闭流
        //字符流 如果不关闭流,或者不刷新缓存区,数据是写不到目的地文件中的
        //字节流可以
        //fw1.close();
        fw1.flush();

        fw1.write('c');
        fw1.flush();
        //close flush方法的区别:
        //                关闭 会刷新缓存区,写出数据,但是输出流不能再次使用
        //                刷新 会刷新缓存区,写出数据,但是输出流可以再次使用

        //2. 写字符数组
        //创建对象
        FileWriter fw2 = new FileWriter("Demo02\\aaa\\e.txt");
        //创建字符数组
        char[] c = {'z','x','v'};
        //fw2.write(c);
        fw2.write(c,1,2);
        //关闭流
        fw2.close();

        //3. 写字符串
        FileWriter fw3 = new FileWriter("Demo02\\aaa\\e.txt");
        fw3.write(" 静夜思 \r\n");
        fw3.write("床前明月光,\r\n");
        fw3.write("疑是地上霜.\r\n");
        fw3.write("举头望明月,\r\n");
        fw3.write("低头思故乡.\r\n");

        fw3.flush();

        //4.
        String s = "中国黑马程序员";
        fw3.write(s,2,5);
        fw3.write(s,s.indexOf("黑"),5);
        fw3.close();
    }
}
